package Dominio;

import hbt.PersistentObject;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import dto.FacturaTO;
import dto.ItemFacturaTO;

@Entity
@Table(name = "facturas")
public class Factura extends PersistentObject{
	
	private static final long serialVersionUID = 1L;

	private int nroFactura; 
	
	@ManyToOne(cascade=CascadeType.MERGE)
	@JoinColumn(name="idCliente")
	private Cliente cliente;	

	@OneToMany(cascade=CascadeType.ALL)
	@JoinColumn(name="idFactura")
	private List<ItemFactura> items;
	
	@Column(name="totalItemFactura",nullable=false, length=10)
	private float totalItemFactura;
	
	@Column(name = "fechaFacturacion")
	@Temporal(TemporalType.DATE)
	private Date fechaFacturacion;
	
	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<ItemFactura> getItems() {
		return items;
	}

	public void setItems(List<ItemFactura> items) {
		this.items = items;
	}

	public float getTotalItemFactura() 
	{
		this.setTotalItemFactura();
		return totalItemFactura;
	}

	public void setTotalItemFactura() 
	{
		float total = 0;
		
		for (ItemFactura item : this.items) 
		{
			total += item.getTotalItemFactura();
		}
		
		this.totalItemFactura = total;
	}

	public Date getFechaFacturacion() {
		return fechaFacturacion;
	}

	public void setFechaFacturacion(Date fechaFacturacion) {
		this.fechaFacturacion = fechaFacturacion;
	}

	public int getNroFactura() {
		return nroFactura;
	}

	public void setNroFactura(int nroFactura) {
		this.nroFactura = nroFactura;
	}
	
	public FacturaTO toTO(){


		List<ItemFacturaTO> itemsFacTO = new ArrayList<ItemFacturaTO>();
		for(ItemFactura itemF : this.items)
		{
			itemsFacTO.add(itemF.toTO());
		}

		
		FacturaTO facTO = new FacturaTO(this.nroFactura, this.cliente.toTO(),this.getTotalItemFactura(), this.fechaFacturacion,itemsFacTO);
		return facTO;

	}

	
}
